package com.mxw.leetcode.B2链表双指针;

import com.mxw.leetcode.B1链表.entity.ListNode;

/**
 * @author Administrator
 * @create 2024/3/13 19:19
 */
public class A03链表两两交换 {

    /**
     * 题意：给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
     * 你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换
     * 示例: 输入: 1->2->3->4->NULL 输出: 2->1->4->3->NULL
     */
    public ListNode swapPairs(ListNode head) {
        // base case 退出提交
        if (head == null || head.next == null) return head;
        // 获取当前节点的下一个节点
        ListNode next = head.next;
        // 进行递归
        ListNode newNode = swapPairs(next.next);
        // 将下一个节点指向上一个节点
        next.next = head;
        // 上个节点指向下一个节点
        head.next = newNode;
        return next;
    }

}
